#pragma  once

#include "Canvas.h"
#include "Graphic.h"
#include "StyledTextContent.h"
#include "StyleRange.h"

class Cursor{};
class Caret{};
class Composite{

};
class Bullet{
	class A{};

};

class StyledText: public Canvas{
public:
	
private:
	static const wchar_t TAB = L'\t';

private:
	Color selectionBackground;
	Color selectionForeground;

public:
		StyledText(Composite, int);
		/*void addExtendedModifyListener(ExtendedModifyListener);
		void addBidiSegmentListener(BidiSegmentListener);
		void addCaretListener(CaretListener);
		void addLineBackgroundListener(LineBackgroundListener);
		void addLineStyleListener(LineStyleListener);
		void addModifyListener(ModifyListener);
		void addPaintObjectListener(PaintObjectListener);
		void addSelectionListener(SelectionListener);
		void addVerifyKeyListener(VerifyKeyListener);
		void addVerifyListener(VerifyListener);
		void addWordMovementListener(MovementListener);*/
		void append(String);
		Point computeSize(int, int, bool);
		void copy();
		void copy(int);
		int getAlignment();
		bool getAlwaysShowScrollBars();
		Color getMarginColor();
		void cut();
		Color getBackground();
		int getBaseline();
		int getBaseline(int);
		bool getBidiColoring();
		bool getBlockSelection();
		Rect getBlockSelectionBounds();
		int getBottomMargin();
		int getCaretOffset();
		StyledTextContent* getContent();
		bool getDragDetect();
		bool getDoubleClickEnabled();
		bool getEditable();
		Color getForeground();
		int getHorizontalIndex();
		int getHorizontalPixel();
		int getIndent();
		bool getJustify();
		int getKeyBinding(int);
		int getCharCount();
		String getLine(int);
		int getLineAlignment(int);
		int getLineAtOffset(int);
		Color getLineBackground(int);
		Bullet getLineBullet(int);
		int getLineCount();
		String getLineDelimiter();
		int getLineHeight();
		int getLineHeight(int);
		int getLineIndent(int);
		bool getLineJustify(int);
		int getLineSpacing();
		int getLinePixel(int);
		int getLineIndex(int);
		int* getLineTabStops(int);
		int getLineWrapIndent(int);
		int getLeftMargin();
		Point getLocationAtOffset(int);
		int getOffsetAtLine(int);
		int getOffsetAtLocation(Point);
		int getOrientation();
		int* getRanges();
		int* getRanges(int, int);
		int getRightMargin();
		Point getSelection();
		Point getSelectionRange();
		int* getSelectionRanges();
		Color getSelectionBackground();
		int getSelectionCount();
		Color getSelectionForeground();
		String getSelectionText();
		StyleRange getStyleRangeAtOffset(int);
		vector<StyleRange> getStyleRanges();
		vector<StyleRange> getStyleRanges(bool);
		vector<StyleRange> getStyleRanges(int, int);
		vector<StyleRange> getStyleRanges(int, int, bool);
		int getTabs();
		int* getTabStops();
		String getText();
		String getText(int, int);
		Rect getTextBounds(int, int);
		String getTextRange(int, int);
		int getTextLimit();
		int getTopIndex();
		int getTopMargin();
		int getTopPixel();
		bool getWordWrap();
		int getWrapIndent();
		void insert(String);
		void invokeAction(int);
		void paste();
		void print();
		//void print(Printer);
		//print(Printer, StyledTextPrintOptions);
		void redraw();
		void redraw(int, int, int, int, bool);
		void redrawRange(int, int, bool);
		/*void removeBidiSegmentListener(BidiSegmentListener);
		void removeCaretListener(CaretListener);
		void removeExtendedModifyListener(ExtendedModifyListener);
		void removeLineBackgroundListener(LineBackgroundListener);
		void removeLineStyleListener(LineStyleListener);
		void removeModifyListener(ModifyListener);
		void removePaintObjectListener(PaintObjectListener);
		void removeSelectionListener(SelectionListener);
		void removeVerifyListener(VerifyListener);
		void removeVerifyKeyListener(VerifyKeyListener);
		void removeWordMovementListener(MovementListener);*/
		void replaceStyleRanges(int, int, StyleRange[]);
		void replaceTextRange(int, int, String);
		void scroll(int, int, int, int, int, int, bool);
		void selectAll();
		void setAlignment(int);
		void setAlwaysShowScrollBars(bool);
		void setBackground(Color);
		void setBlockSelection(bool);
		void setBlockSelectionBounds(Rect);
		void setBlockSelectionBounds(int, int, int, int);
		void setCaret(Caret);
		void setBidiColoring(bool);
		void setBottomMargin(int);
		void setCaretOffset(int);
		void setContent(StyledTextContent&);
		void setCursor(Cursor);
		void setDoubleClickEnabled(bool);
		void setDragDetect(bool);
		void setEditable(bool);
		void setFont(Font);
		void setForeground(Color);
		void setHorizontalIndex(int);
		void setHorizontalPixel(int);
		void setIndent(int);
		void setJustify(bool);
		void setKeyBinding(int, int);
		void setLeftMargin(int);
		void setLineAlignment(int, int, int);
		void setLineBackground(int, int, Color);
		void setLineBullet(int, int, Bullet);
		void setLineIndent(int, int, int);
		void setLineJustify(int, int, bool);
		void setLineSpacing(int);
		void setLineTabStops(int, int, int*);
		void setLineWrapIndent(int, int, int);
		void setMarginColor(Color);
		void setMargins(int, int, int, int);
		void setOrientation(int);
		void setRightMargin(int);
		void setSelection(int);
		void setSelection(Point);
		void setSelectionBackground(Color);
		void setSelectionForeground(Color);
		void setSelection(int, int);
		void setSelectionRange(int, int);
		void setStyleRange(StyleRange);
		void setStyleRanges(int, int, int*, StyleRange[]);
		void setStyleRanges(int*, StyleRange[]);
		void setStyleRanges(StyleRange[]);
		void setTabs(int);
		void setTabStops(int*);
		void setText(String);
		void setTextLimit(int);
		void setTopIndex(int);
		void setTopMargin(int);
		void setTopPixel(int);
		void setWordWrap(bool);
		void setWrapIndent(int);
		void showSelection();

};